원시타입

숫자 : number

문자열 : string

불리언(true/false) : bool

null : null 이라는 빈값을 할당, 비어있는 객체를 뜻함(null은 객체형 데이터-ex: array, object-의 빈 값을 의미)

undefined : 변수를 선언만 하고 값을 할당하지 않음/즉, 자료형이 결정되지 않은 상태이다.

NaN : Not a Number 숫자가 아닌 값을 뜻함, 숫자가 아닌 값을 형변환시나, 연산 불가시.

값 복사시, 실제 값이 복사된다

래퍼객체

1
2
3
4
5
var str = 'coding';
console.log(str.length); // 6

str.prop = 'lala';
console.log(str.prop); //undefined

str은 원시 데이터타입으로 보이는데, 신기하게 객체처럼 메서드가 작동한다! 어떻게 된걸까?

자바스크립트에서는 문자열과 관련된 어떤 작업을 하려고 할때 임시로 문자열 객체를 만들고 사용이 끝나면 제거한다.

str.prop을 하는 순간 내부적으로 String 객체가 만들어 지고 저장되지만, 다시 해당 객체는 제거되기 때문에 str.prop을 호출하면 undefined가 나오는 것이다.

래퍼 객체는 Number, String, Boolean이 존재한다.

참조

var a = {}; 일때 a는 객체를 가리키는 참조이다. 객체의 메모리 공간을 직접 접근이 불가능하므로, 참조를 통해 접근한다.

값 복사시, 객체 자체가 아닌 참조(포인터)를 복사한다. 따라서 한쪽을 조작시 다른 쪽도 반영된다.

1
2
3
4
var a = {};
var b = a;
b.x = 3;
console.log(a.x); //3

매개변수 전달

위 변수들을 매개변수로 저장할 때에도, 값 복사와 동일한 결과가 나온다. 원시타입의 경우에는 값이 복사되고, 참조값의 경우에는 참조값이 복사된다.

참조값을 함수로 넘겨 변경하면 밖에서도 변경된다

1
2
3
4
5
6
var a = {};
function addX(ref) {
ref.x = 3;
}
addX(a);
console.log(a.x); // 3

타입 판별

원시타입 : typeof

참조타입 : instanceof

1
2
3
typeof null // Object
var person = {};
person instanceof Object // true

가비지 컬렉션

함수 스코프를 벗어난 변수들은 자동으로 가비지 컬렉션의 대상이 된다.

그러나 전역변수는 해당 웹사이트가 종료되기 전까지 계속 존재하므로 사용하지 않게 되면 null로 초기화해주는 습관이 필요하다.

Reference

http://enarastudent.tistory.com/entry/null과-undefined의-차이

https://stackoverflow.com/questions/1068834/object-comparison-in-javascript